package com.kang.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.kang.pojo.InventoryLoss;
import com.kang.pojo.InventoryLossStatistics;
import com.kang.pojo.InventoryLoss_itemInformation;
import com.vonechina.entity.page.LossListPage;
import com.vonechina.entity.page.LossStatisticsListPage;

/**
 * 库存报损--DAO层持久层
 * @author wd
 *
 */
public interface InventoryLossMapper {

	/**
	 * 查询报损列表总条数
	 * @param lossListPage	库存报损list（分页封装实体类）
	 * @return	int型
	 */
	public int selectByWhereCount(LossListPage lossListPage);

	/**
	 * 查询报损集合
	 * @param lossListPage	库存报损list（分页封装实体类）
	 * @return	集合
	 */
	public List<InventoryLoss> selectByWhereList(LossListPage lossListPage);

	/**
	 * 根据报损id查询报损详情物品列表
	 * @param inventorylossid	库存报损ID
	 * @return	集合（报损物品集合（实体类信息））
	 */
	public List<InventoryLoss_itemInformation> listItemByInventorylossid(Integer inventorylossid);

	/**
	 * 根据报损id查询报损信息
	 * @param inventorylossid	库存报损ID
	 * @return	库存报损信息（实体类）
	 */
	public InventoryLoss getInventoryLossById(Integer inventorylossid);

	/**
	 * 根据报损ID删除报损单
	 * @param inventoryLossID	报损单ID
	 * @return	int型（大于0代表成功否则失败）
	 */
	public int deleteInventoryLossById(int inventoryLossID);
	
	/**
	 * 根据报损ID删除属于该报损单的物品
	 * @param inventoryLossID	报损单ID
	 * @return	int型（大于0代表成功否则失败）
	 */
	public int deleteInventoryLossToItemById(int inventoryLossID);

	/**
	 * 修改报损单信息
	 * @param inventoryLoss	报损信息（实体类）
	 * @return	int型（大于0成功否则失败）
	 */
	public int updateInventoryLoss(InventoryLoss inventoryLoss);

	/**
	 * 删除报损单的中不属于当前集合的物品id的物品
	 * @param inventorylossid	报损ID
	 * @param itemIds	批次ID
	 * @return	int型（大于0成功否则失败）
	 */
	public int deleteItemNotInLossSingle(@Param("inventorylossid")Integer inventorylossid,
			@Param("itemIds")Integer[] itemIds);

	/**
	 * 根据报损ID和批次ID查询报损物品信息
	 * @param inventorylossid	报损ID
	 * @param itemId	批次ID
	 * @return	报损物品信息（实体类）
	 */
	public InventoryLoss_itemInformation selectLossItemInfoByItemid(
			@Param("inventorylossid")Integer inventorylossid,@Param("itemId") Integer itemId);

	/**
	 * 添加新物品到报损单中
	 * @param iiInfo	报损物品信息（实体类）
	 * @return	int型（大于0成功否则失败）
	 */
	public int insertNewItemToLoss(InventoryLoss_itemInformation iiInfo);

	/**
	 * 修改报损物品信息
	 * @param iiInfo	报损物品信息（实体类）
	 * @return	nt型（大于0成功否则失败）
	 */
	public int updateItemNumberToLoss(InventoryLoss_itemInformation iiInfo);

	/**
	 * 提交报损单
	 * @param userID	提交人ID
	 * @param inventorylossid	报损ID
	 * @return	int型（大于0成功否则失败）
	 */
	public int saveAndSubmitInventoryLoss(@Param("userID")Integer userID,@Param("inventorylossid")Integer inventorylossid);

	/**
	 * 查询当前最大的报损单号
	 * @return 当前最大的报损单号
	 */
	public String selectMaxLossNumber();

	/**
	 * 新增报损单信息
	 * @param inventoryLoss	报损单信息（实体来）
	 * @return	int型（大于0成功否则失败）
	 */
	public int addNewInventoryLoss(InventoryLoss inventoryLoss);

	/**
	 * 根据报损单号查询报损id
	 * @param lossnumber	报损单号
	 * @return	int型报损ID
	 */
	public Integer getLossIdByLossNumber(String lossnumber);

	/**
	 * 库存报损统计-集合列表
	 * @param lossStatisticsListPage	报表查询条件（封装的分页实体类）
	 * @return	报损集合
	 */
	public List<InventoryLossStatistics> selectInventoryLossStatisticsList(LossStatisticsListPage lossStatisticsListPage);

	/**
	 * 库存报损统计-查询总条数
	 * @param lossStatisticsListPage	报表查询条件（封装的分页实体类）
	 * @return	总记录数
	 */
	public int selectInventoryLossStatisticscount(LossStatisticsListPage lossStatisticsListPage);

}
